package com.team.mp.api.security.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

import com.team.mp.api.security.entity.LoginUser;
import com.team.mp.mapper.dao.SysPermissionDao;
import com.team.mp.mapper.dao.SysUserDao;
import com.team.mp.mapper.entity.SysUser;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import javax.annotation.Resource;

import java.util.List;

/**
 * ━━━━━━Feri出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　 ┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　  ┃
 * 　　┃　　　　　　 ┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃    邢哥的代码，怎么会，有bug呢，不可能！
 * 　　　　┃　　　┃
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━永无BUG!━━━━━━
 *
 * @Description:
 * @Author：邢朋辉
 * @Date: 2023/3/25 16:21
 */
@Service
public class UserDetailServiceImpl implements UserDetailsService {
    @Resource
    private SysUserDao dao;
    @Resource
    private SysPermissionDao permissionDao;
    /**
     * 查询数据库，通过用户名查询对应的用户和用户对应权限列表*/
    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        //1.验证
        if(StringUtils.hasLength(username)){
            //2.查询数据库
            SysUser user=dao.selectOne(new QueryWrapper<SysUser>().eq("username",username));
            //3.校验用户是否存在
            if(user!=null){
                List<String> list = permissionDao.selectPermNameByUid(user.getId());
                //4.组装 UserDetails
                return new LoginUser(user,list.toArray(new String[0]));
            }
        }
        throw new UsernameNotFoundException("亲，用户名不存在！");
    }
}
